﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sistema_Totem.Logica.Clases;
using Sistema_Totem.Logica.Excepciones;

namespace Sistema_Totem.Vista.CU
{
    public partial class EliminarActor : System.Web.UI.Page
    {
        private string valor;
        private List<Actor> listaActor2;
        private string nombreProyecto;
        protected void Page_Load(object sender, EventArgs e)
        {
            //se esta asignando hasta que se establezca la variable global
            NombreProyecto = "TOTEM";
            try
            {
                //if (Session["tipo_usuario"].ToString() == null || Session["tipo_usuario"].ToString() == "Administrador")
                //{
                //    Response.Redirect("Login1.aspx");
                //}
            }
            catch (NullReferenceException)
            {
                Response.Redirect("~/Vista/Login/Login1.aspx");
            } 
            if (!IsPostBack)
            {

                List<Actor> datos = CargarActor();           
                GridViewEliminarActor.DataSource = datos;
                GridViewEliminarActor.DataBind();

            }

        }

        /// <summary>
        /// Llena el Gridview
        /// </summary>
        /// <returns></returns>
        protected List<Actor> CargarActor()
        {
            List<Actor> datos = new List<Actor>();
            Actor dato = new Actor();
            Proyecto proy = (Proyecto)Session["objProyecto"];
            try
            {
                datos = dato.ListarActores(proy.IdProyecto);
            }
            catch (ActorExcepcion error)
            {
                MensajeDeTransaccion.Text = error.Message;
                MensajeDeTransaccion.CssClass = "transaccionFallida";
                MensajeDeTransaccion.Visible = true;
                GridViewEliminarActor.Visible = false;

            }
            return datos;
        }

     
      

        protected void GridViewEliminarActor_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridViewEliminarActor.PageIndex = e.NewPageIndex;
            GridViewEliminarActor.DataSource = CargarActor();
            GridViewEliminarActor.DataBind();
        }

        /// <summary>
        /// Aqui entra cuando el usuario hace click en el boton de eliminar y asi sabe donde esta posicionado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void GridViewEliminarActor_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Elim")
            {
                try
                {
                    // Retrieve the row index stored in the 
                    // CommandArgument property.
                    int index = Convert.ToInt32(e.CommandArgument);
                    // Retrieve the row that contains the button 
                    // from the Rows collection.
                    GridViewRow row = GridViewEliminarActor.Rows[index];
                    int idActor = Convert.ToInt32(row.Cells[0].Text);
                    //System.Diagnostics.Debug.WriteLine(idActor + "aja");
                    Actor eliminado = new Actor();
                    eliminado.EliminarActor(idActor);
                    List<Actor> datos = CargarActor();
                    GridViewEliminarActor.DataSource = datos;
                    GridViewEliminarActor.DataBind();
                    MensajeDeTransaccion.Text = "Actor eliminado con éxito";
                    MensajeDeTransaccion.CssClass = "transaccionExitosa";
                    MensajeDeTransaccion.Visible = true;
                }
                catch (Exception)
                {
                    MensajeDeTransaccion.Text = "Actor no fue eliminado";
                    MensajeDeTransaccion.CssClass = "transaccionFallida";
                    MensajeDeTransaccion.Visible = true;
                }
            }

        }

        protected void GridViewConsultarActor_SelectedIndexChanged(object sender, EventArgs e)
        {
            int idActor = Convert.ToInt32(GridViewEliminarActor.SelectedRow.Cells[0].Text);
            Actor eliminado = new Actor();
            eliminado.EliminarActor(idActor);
            List<Actor> datos = CargarActor();
            GridViewEliminarActor.DataSource = datos;
            GridViewEliminarActor.DataBind();
            MensajeDeTransaccion.Text = "Actor eliminado con éxito";
            MensajeDeTransaccion.CssClass = "transaccionExitosa";
            MensajeDeTransaccion.Visible = true;
        }


        /// <summary>
        /// motor de busqueda basico para actores, puede buscar por CODIGO o NOMBRE
        /// deben ser escritos exactamente como estan registrados
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BuscarParametro_Click(object sender, EventArgs e)
        {
            try
            {
                switch (Convert.ToInt32(tipoBusqueda.SelectedValue))
                {
                    //en caso de buscar por nombre
                    case 1:
                        listaActor2 = new List<Actor>();
                        listaActor2 = CargarActor();
                        valor = textBuscar.Text;
                        GridViewEliminarActor.DataSource = CargarActorTabla2(listaActor2, 1, valor);
                        GridViewEliminarActor.DataBind();
                        break;

                    //en caso de buscar por codigo
                    case 2:
                        listaActor2 = new List<Actor>();
                        listaActor2 = CargarActor();
                        valor = textBuscar.Text;
                        GridViewEliminarActor.DataSource = CargarActorTabla2(listaActor2, 2, valor);
                        GridViewEliminarActor.DataBind();
                        break;
                }
            }
            // en caso de ocurrir una excepcion -manejo interno del grupo
            catch (ActorExcepcion error)
            {
                MensajeDeTransaccion.Text = error.Message;
                MensajeDeTransaccion.CssClass = "transaccionFallida";
                MensajeDeTransaccion.Visible = true;
                GridViewEliminarActor.Visible = false;

            }
        }



        /// <summary>
        /// Metodo encargado de re-escribir el gridview de actores
        /// </summary>
        /// <param name="listaActor">recibe la lista de actores</param>
        /// <param name="caso">si el caso es buscar por CODIGO o por NOMBRE</param>
        /// <param name="valor">el valor de comparacion a buscar dentro de la lista</param>
        /// <returns>el actor buscado</returns>
        public List<Actor> CargarActorTabla2(List<Actor> listaActor, int caso, string valor)
        {
            //se crea una nueva lista de Actores
            List<Actor> actorEncontrado = new List<Actor>();
            //si busca por Nombre
            if (caso == 1)
            {
                foreach (Actor miActor in listaActor)
                {
                    if (miActor.Nombre == valor)
                    {
                        actorEncontrado.Add(miActor);
                    }
                }
            }
            else
            {
                //si busca por Codigo
                if (caso == 2)
                {
                    foreach (Actor miActor in listaActor)
                    {
                        if (miActor.IdActor == Convert.ToInt32(valor))
                        {
                            actorEncontrado.Add(miActor);
                        }
                    }
                }
            }

            //si no encontro a nadie en la lista
            if (actorEncontrado.Count == 0)
            {
                //se lanza una excepcion personalizada con un mensaje al usuario
                throw (new ActorExcepcion("No hay resultado para su busqueda"));
            }

            return actorEncontrado;
        }


        public String NombreProyecto
        {
            get { return nombreProyecto; }
            set { nombreProyecto = value; }
        }

    }
}